///////////////////////////////////////////////////////////////////////////////
//	FILENAME:	eTBookmarkEnd.m
//	SUMMARY:	Implementation of the "stupid" end-of-region tag
//	SUPERCLASS:	Object
//	INTERFACE:	None
//	PROTOCOLS:	<Annotation>
//	AUTHOR:		Rohit Khare
//	COPYRIGHT:	(c) 1994 California Institure of Technology, eText Project
///////////////////////////////////////////////////////////////////////////////
//  IMPLEMENTATION COMMENTS
//		Does as close to nothing as possible.
///////////////////////////////////////////////////////////////////////////////
//	HISTORY
//	05/08/94:	Created. First actual implementation.
///////////////////////////////////////////////////////////////////////////////

#import "eTBookmarkEnd.h"

@implementation eTBookmarkEnd
//	id 		etBookmark;
//	long	anchorID;

- init {return [self init:nil ID:0];}

- init:theBookmark ID:(long)theID
{
	[super init];
	etBookmark = theBookmark;
	anchorID = theID;
	theIcon = [NXImage findImageNamed:".bmEnd"];
	highlighted = NO;
	return self;
}

- beginDidFree
{
	etBookmark = nil;
	return self;
}

- free
{
	if (etBookmark) etBookmark = [etBookmark endDidFree:self];
	return self = [super free];
}

- click:sender {if (etBookmark) [etBookmark click:sender]; return self;}
- doubleClick:sender {if (etBookmark) [etBookmark doubleClick:sender]; return self;}

/////////////////////////
- initFromPboard:thePboard inDoc:theDoc linked:(BOOL) linked
{
	NXLogError("initFromPboard called for bmEnd; should not have happened");
	return [self init];
}
- calcCellSize:(NXSize *)theSize 
	{[theIcon getSize:theSize]; return self;}
- drawSelf:(const NXRect *)cellFrame inView:view		// MARGINALIA HERE!
{
	NXPoint	point;
	
    PSgsave();
	PSsetgray([view backgroundGray]);
	NXRectFill(cellFrame);
    point = cellFrame->origin;
    point.y += cellFrame->size.height;
	[theIcon composite:NX_SOVER toPoint:&point];
    PSgrestore();
    return self;
}
- highlight:(const NXRect *)cellFrame inView:view lit:(BOOL)flag
{
    if (highlighted != flag) {
		highlighted = flag;
      /* toggle highlighting */
		NXHighlightRect(cellFrame);
    }
    return self;
}
- (BOOL)	trackMouse:(NXEvent *)theEvent
			inRect:(const NXRect *)rect
			ofView:view
{
 	// TO fix this, check out Concepts chapter 7, prog dynam.
	if (!etBookmark) {	
		if (theEvent->data.mouse.click == 2)
			[self doubleClick:self];
		else if (theEvent->data.mouse.click == 1)
			[self click:self];
	} else {
		[etBookmark trackMouse:theEvent inRect:rect ofView:view];
	}
	return YES;
}

- writeRichText:(NXStream *)stream forView:view
{
	NXPrintf(stream, "%x ", anchorID);
	return self;
}
- readRichText:(NXStream *)stream forView:view 
{
	NXScanf(stream, "%x ", &anchorID);
	etBookmark = [[eTBookmarkBinder new] bookmarkForID:anchorID];
	[etBookmark setEnd:self]; 
	return self;
}

@end
